
// #region [产品描述]
/**
 * 从产品描述中提取内容
 * @param doc 文档对象（类似BeautifulSoup的解析结果）
 * @returns 提取到的描述内容片段数组
 */
function extractFromExpanderContent(expanderContent: Element): string[] {
  /** 专门提取展开器内容 */
  const lines: string[] = [];

  // 提取所有 p、span、div 标签的文本内容
  const tags = expanderContent.querySelectorAll('p, span, div');
  tags.forEach(tag => {
      const text = tag.textContent?.trim();
      if (text && text.length > 20) {  // 过滤掉过短的文本
          lines.push(text);
      }
  });

  // 如果没有提取到内容，尝试直接获取整个展开器的文本
  if (lines.length === 0) {
      const fullText = expanderContent.textContent?.trim();
      if (fullText && fullText.length > 50) {
          lines.push(fullText);
      }
  }
  return lines;
}

function extractFromProductDescription(doc: Document): string[] {
  // 定义所有可能的产品描述容器ID
  const descriptionContainerIds = [
      'productDescription',
      'bookDescription_feature_div',
      'richProductDescription_feature_div'
  ];

  const descriptionParts: string[] = [];

  for (const containerId of descriptionContainerIds) {
      // 使用querySelector查找对应ID的div容器
      const containerDiv = doc.querySelector(`div#${containerId}`);
      if (!containerDiv) {
          continue;
      }

      // 尝试提取展开器内容（常见于书籍和某些产品）
      const expanderContent = containerDiv.querySelector('div.a-expander-content');
      if (expanderContent) {
          descriptionParts.push(...extractFromExpanderContent(expanderContent));
      } else {
          // 直接提取容器内的文本内容
          const text = containerDiv.textContent?.trim().replace(/\s+/g, '\n');
          if (text && text.length > 50) {
              const lines = text.split('\n')
                  .map(line => line.trim())
                  .filter(line => line && line.length > 10);
              descriptionParts.push(...lines);
          }
      }
  }

  return descriptionParts;
}

function extractFromProductDetails(doc: Document): string[] {
  // 查找目标详情容器
  const detailsDiv = doc.querySelector("div[data-expanded='false'] div.a-section[role='list']");
  if (!detailsDiv) {
      return [];
  }

  const specs: string[] = [];
  // 获取所有详情行元素
  const rows = detailsDiv.querySelectorAll("div.a-fixed-left-grid.product-facts-detail");
  
  rows.forEach(row => {
      // 查找标签元素
      const labelElem = row.querySelector("span.a-color-base");
      // 查找值元素（取最后一个匹配的span）
      const valueElems = row.querySelectorAll("span.a-color-base");
      const valueElem = valueElems[valueElems.length - 1];

      if (labelElem && valueElem) {
          const label = labelElem.textContent?.trim() || '';
          const value = valueElem.textContent?.trim() || '';
          if (label && value) {
              specs.push(`${label}: ${value}`);
          }
      }
  });

  // if (specs.length > 0) {
  //     console.log("✅ 通过 Product Details 模式抓取到描述内容");
  // }
  return specs;
}

/**
 * 提取 "About this item" 部分的描述内容，兼容多种 HTML 结构。
 * @param doc 文档对象（类似BeautifulSoup的解析结果）
 * @returns 提取到的描述内容数组
 */
function extractFromAboutThisItem(doc: Document): string[] {
  /**
   * 提取 "About this item" 部分的描述内容，兼容多种 HTML 结构。
   */
  // 尝试匹配不同的间距类名（转换为 CSS 选择器格式）
  const possibleClasses = [
      "a-unordered-list.a-vertical.a-spacing-small",
      "a-unordered-list.a-vertical.a-spacing-mini"
  ];

  let descriptions: string[] = [];

  for (const className of possibleClasses) {
      // 优先匹配带有 data-expanded='false' 的父级 div 下的目标 ul
      let aboutUl = doc.querySelector(`div[data-expanded="false"] ul.${className}`);
      
      if (!aboutUl) {
          // 如果未找到，则直接匹配 ul 元素（忽略父级 div）
          aboutUl = doc.querySelector(`ul.${className}`);
      }

      if (aboutUl) {
          // 提取所有 li 元素的文本内容
          const liElements = aboutUl.querySelectorAll('li');
          descriptions = Array.from(liElements).map(li => li.textContent?.trim() || '');
          // 过滤空字符串
          descriptions = descriptions.filter(text => text);
          break; // 成功匹配后退出循环
      }
  }

  // if (descriptions.length > 0) {
  //     console.log("✅ 通过 About this item 模式抓取到描述内容");
  // }
  return descriptions;
}

function extractFromMetaDescription(doc: Document): string {
  /**
   * 提取 meta 标签中的描述内容
   */
  // 查找 name 属性为 'description' 的 meta 标签
  const metaDesc = doc.querySelector('meta[name="description"]');
  
  if (metaDesc) {
      // 获取 content 属性值
      const content = metaDesc.getAttribute('content');
      if (content) {
          // 若需要日志可取消注释
          // console.log("✅ 通过 meta description 模式抓取到描述内容");
          return content;
      }
  }
  
  return "";
}

/**
 * 提取产品描述（多来源优先级：productDescription → About this item → Product Details → meta description）
 * @param doc 浏览器DOM Document对象
 * @returns 合并去重后的产品描述文本（空字符串表示未提取到）
 */
export function extractProductDescription(doc: Document): string {
  const descriptionParts: string[] = [];

  // Step 1: 提取productDescription内容
  descriptionParts.push(...extractFromProductDescription(doc));

  // Step 2: 提取垂直列表描述（About this item）
  descriptionParts.push(...extractFromAboutThisItem(doc));

  // Step 3: 提取Product Details表格数据
  descriptionParts.push(...extractFromProductDetails(doc));

  // Step 4: 兜底使用meta description
  if (descriptionParts.length === 0) {
    const metaDesc = extractFromMetaDescription(doc);
    if (metaDesc) {
      descriptionParts.push(metaDesc);
    }
  }

  // 去重处理：保留首次出现的片段，过滤空内容
  const seen = new Set<string>();
  const uniqueParts = descriptionParts.filter((part) => {
    if (part && !seen.has(part)) {
      seen.add(part);
      return true;
    }
    return false;
  });

  // 合并为换行分隔的文本
  return uniqueParts.length > 0 ? uniqueParts.join("\n") : "";
}
// #endregion
